"""
Django admin模块用于管理Job和Resume模型。其中，JobAdmin类定义了在admin页面显示的字段以及保存模型时的行为；ResumeAdmin类定义了简历模型在admin页面的展示方式、操作行为以及保存模型时的行为。

JobAdmin类：
- exclude: 排除在admin页面显示的字段，包括创建者、创建日期和修改日期。
- list_display: 定义在admin页面列表中显示的字段，包括职位名称、职位类型、工作地点、创建者和创建/修改日期。
- save_model: 当保存模型时，如果创建者为空，则将当前用户设置为创建者。

enter_interview_process函数：
- modeladmin, request, queryset: Django admin传入的参数，分别表示模型管理器、请求对象和查询集。
- 遍历查询集中的每一个简历对象，将其复制到候选人对象中，并设置创建日期和修改日期为当前时间，同时设置创建者为当前用户。然后将候选人对象保存到数据库中。最后向请求对象添加一条消息，表示候选人已成功进入面试流程。

ResumeAdmin类：
- actions: 定义在admin页面可以执行的操作，包括进入面试流程。
- image_tag方法：生成一个HTML标签，用于在admin页面显示图片。如果简历有图片，则返回图片的HTML标签；否则返回空字符串。
- list_display: 定义在admin页面列表中显示的字段，包括用户名、申请人、城市、应聘职位、本科学校、硕士学校、图片、专业和创建日期。
- readonly_fields: 定义在admin页面只读的字段，包括申请人、创建日期和修改日期。
- fieldsets: 定义在admin页面表单中的字段分组。
- save_model: 当保存模型时，将当前用户设置为申请人。
"""

from django.contrib import admin
from django import forms

from django.contrib import messages
from interview.models import Candidate
from datetime import datetime

from jobs.models import Job
from jobs.models import Resume

class JobAdmin(admin.ModelAdmin):
    exclude = ('creator','created_date','modified_date')
    list_display = ('job_name', 'job_type', 'job_city', 'creator', 'created_date', 'modified_date')

    def save_model(self, request, obj, form, change):
        if obj.creator is None:
            obj.creator = request.user
        super().save_model(request, obj, form, change)


def enter_interview_process(modeladmin, request, queryset):
    candidate_names = ""
    for resume in queryset:
        candidate = Candidate()
        # 把 obj 对象中的所有属性拷贝到 candidate 对象中:
        candidate.__dict__.update(resume.__dict__)
        candidate.resumeid=resume.id
        candidate.created_date = datetime.now()
        candidate.modified_date = datetime.now()
        candidate_names = candidate.username + "," + candidate_names
        candidate.creator = request.user.username
        candidate.save()
    messages.add_message(request, messages.INFO, '候选人: %s 已成功进入面试流程' % (candidate_names) )


enter_interview_process.short_description = u"进入面试流程"

from django.utils.html import format_html

class ResumeAdmin(admin.ModelAdmin):

    actions = (enter_interview_process,)

    def image_tag(self, obj):              
        if obj.picture:
            return format_html('<img src="{}" style="width:100px;height:80px;"/>'.format(obj.picture.url))
        return ""
    image_tag.allow_tags = True
    image_tag.short_description = 'Image'

    list_display = ('username', 'applicant', 'city', 'apply_position', 'bachelor_school', 'master_school', 'image_tag', 'major','created_date')

    readonly_fields = ('applicant', 'created_date', 'modified_date',)

    fieldsets = (
        (None, {'fields': (
            "applicant", ("username", "city", "phone"),
            ("email", "apply_position", "born_address", "gender", ), ("picture", "attachment",),
            ("bachelor_school", "master_school"), ("major", "degree"), ('created_date', 'modified_date'),
            "candidate_introduction", "work_experience","project_experience",)}),
    )

    def save_model(self, request, obj, form, change):
        obj.applicant = request.user
        super().save_model(request, obj, form, change)


# Register your models here.
admin.site.register(Job, JobAdmin)
admin.site.register(Resume, ResumeAdmin)